home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 020 / modula.arc / FUNCTION.MOD < prev    next >
Encoding:
Modula Implementation  |  1986-03-26  |  4.7 KB  |  277 lines

  1. IMPLEMENTATION MODULE Functions;
  2.  
  3. FROM InOut   IMPORT Write, WriteLn, WriteString, WriteCard;
  4. FROM Strings IMPORT Copy, Length, Pos;
  5. FROM RealInOut IMPORT WriteReal;
  6.  
  7.  
  8. PROCEDURE CardMin( a,b : CARDINAL) : CARDINAL;
  9. BEGIN
  10.   IF b < a THEN
  11.      RETURN(b);
  12.    ELSE
  13.      RETURN(a);
  14.   END;
  15. END CardMin;
  16.  
  17.  
  18. PROCEDURE IntMin( a,b : INTEGER) : INTEGER;
  19. BEGIN
  20.   IF b < a THEN
  21.      RETURN(b);
  22.    ELSE
  23.      RETURN(a);
  24.   END;
  25. END IntMin;
  26.  
  27.  
  28. PROCEDURE RealMin( a,b : REAL) : REAL;
  29. BEGIN
  30.   IF b < a THEN
  31.      RETURN(b);
  32.    ELSE
  33.      RETURN(a);
  34.   END;
  35. END RealMin;
  36.  
  37.  
  38. PROCEDURE CardMax( a,b : CARDINAL) : CARDINAL;
  39. BEGIN
  40.   IF b > a THEN
  41.      RETURN(b);
  42.    ELSE
  43.      RETURN(a);
  44.   END;
  45. END CardMax;
  46.  
  47. PROCEDURE IntMax( a,b : INTEGER) : INTEGER;
  48. BEGIN
  49.   IF b > a THEN
  50.      RETURN(b);
  51.    ELSE
  52.      RETURN(a);
  53.   END;
  54. END IntMax;
  55.  
  56.  
  57. PROCEDURE RealMax( a,b : REAL) : REAL;
  58. BEGIN
  59.   IF b > a THEN
  60.     RETURN(b);
  61.    ELSE
  62.      RETURN(a);
  63.   END;
  64. END RealMax;
  65.  
  66.  
  67. PROCEDURE RightPad(VAR dest : ARRAY OF CHAR; source : ARRAY OF CHAR;
  68.                    i : CARDINAL);
  69. VAR
  70.  c,q : CARDINAL;
  71. BEGIN
  72.  c := Length(source);
  73.  Copy(source,0,c,dest);
  74.  IF (c < i) THEN
  75.    FOR q := c TO i-1 DO
  76.      dest[q] := ' ';
  77.    END;   (* for *)
  78.  END;  (* if *)
  79.  dest[i] := CHR(0);
  80. END RightPad;
  81.  
  82.  
  83. PROCEDURE LeftPad(VAR dest : ARRAY OF CHAR; source : ARRAY OF CHAR;
  84.                    i : CARDINAL);
  85. VAR
  86.  c,f,q : CARDINAL;
  87. BEGIN
  88.  c := Length(source);
  89.  Copy(source,0,c,dest);
  90.  f := i - c;
  91.  IF f > 0 THEN
  92.    FOR q := c TO 0 BY -1 DO
  93.      dest[q+f] := dest[q];
  94.    END;
  95.    FOR q := 0 TO f-1 DO
  96.      dest[q] := ' ';
  97.    END;
  98.    dest[i] := CHR(0);
  99.  END;
  100. END LeftPad;
  101.  
  102.  
  103. PROCEDURE ToSpaces(VAR dest : ARRAY OF CHAR; i : CARDINAL);
  104. VAR
  105.  q : CARDINAL;
  106. BEGIN
  107.  FOR q := 0 TO i-1 DO
  108.    dest[q] := ' ';
  109.  END;
  110.  dest[i] := CHR(0);
  111. END ToSpaces;
  112.  
  113.  
  114. PROCEDURE RightTrim(VAR dest : ARRAY OF CHAR; source : ARRAY OF CHAR);
  115. VAR
  116.  c,q : CARDINAL;
  117. BEGIN
  118.  c := Length(source);
  119.  Copy(source,0,c,dest);
  120.  WHILE dest[c] = ' ' DO
  121.    DEC(c);
  122.  END;   (* while *)
  123.  IF c < Length(source) THEN
  124.   dest[c+1] := CHR(0);
  125.  END;
  126. END RightTrim;
  127.  
  128.  
  129. PROCEDURE LeftTrim(VAR dest : ARRAY OF CHAR; source : ARRAY OF CHAR);
  130. VAR
  131.  c,d,q : CARDINAL;
  132. BEGIN
  133.  c := Length(source);
  134.  Copy(source,0,c,dest);
  135.  q := 0;
  136.  WHILE dest[q] = ' ' DO
  137.    INC(q);
  138.  END;   (* while *)
  139.  IF q <> 0 THEN
  140.    FOR d := q TO c DO
  141.       dest[d-q] := dest[d];
  142.    END;
  143.    dest[c-q] := CHR(0);
  144.  END;
  145. END LeftTrim;
  146.  
  147.  
  148. PROCEDURE LeftString(VAR dest : ARRAY OF CHAR; source : ARRAY OF CHAR;
  149.                      i : CARDINAL);
  150. VAR
  151.  c,d,q : CARDINAL;
  152. BEGIN
  153.   Copy(source,0,i,dest);
  154. END LeftString;
  155.  
  156.  
  157. PROCEDURE RightString(VAR dest : ARRAY OF CHAR; source : ARRAY OF CHAR;
  158.                      i : CARDINAL);
  159. VAR
  160.  c,d,q : CARDINAL;
  161. BEGIN
  162.   c := Length(source);
  163.   q := c-i;
  164.   FOR d := 0 TO i DO
  165.     dest[d] := source[q+d];
  166.   END;
  167.   dest[i] := CHR(0);
  168. END RightString;
  169.  
  170.  
  171. PROCEDURE RepeatString(VAR dest : ARRAY OF CHAR; ch : CHAR; i : CARDINAL);
  172. VAR
  173.  c : CARDINAL;
  174. BEGIN
  175.  FOR c := 0 TO i DO
  176.    dest[c] := ch;
  177.  END;
  178.  dest[i] := CHR(0);
  179. END RepeatString;
  180.  
  181.  
  182. PROCEDURE StringReplace(VAR dest : ARRAY OF CHAR; ch1,ch2 : CHAR);
  183. VAR
  184.  a,h : CARDINAL;
  185. BEGIN
  186.   h := HIGH(dest);
  187.   a := Pos(ch1,dest);
  188.   WHILE a <= h DO
  189.     dest[a] := ch2;
  190.     a := Pos(ch1,dest);
  191.   END;
  192. END StringReplace;
  193.  
  194.  
  195. PROCEDURE MidString(VAR dest : ARRAY OF CHAR; source : ARRAY OF CHAR;
  196.                     beg,len : CARDINAL);
  197.  
  198. VAR
  199.   i,k : CARDINAL;
  200. BEGIN
  201.   k := CardMin(len,Length(source));
  202.   FOR i := 0 TO k-1 DO
  203.     dest[i] := source[beg+i];
  204.   END;
  205.   dest[k] := CHR(0);
  206. END MidString;
  207.  
  208.  
  209. PROCEDURE RealSign(x : REAL) : REAL;
  210. BEGIN
  211.  IF x < 0.0 THEN
  212.    RETURN(-1.0);
  213.   ELSE
  214.    RETURN(1.0);
  215.  END;
  216. END RealSign;
  217.  
  218. PROCEDURE Round( x : REAL) : REAL;
  219. VAR
  220.  f,g,k : REAL;
  221. BEGIN
  222.  f := ABS(x) + 0.00501;
  223.  k := f * 100.0;
  224.  g := k / 100.0;
  225.  g := g * RealSign(x);
  226.  RETURN(g);
  227. END Round;
  228.  
  229.  
  230. PROCEDURE RecHi( recno, filelen : CARDINAL) : CARDINAL;
  231. VAR
  232.  rechi : CARDINAL;
  233.  RECHI,HI,RECNO,FILELEN : REAL;
  234. BEGIN
  235.  HI := 6.5536E4;
  236.  
  237.  RECNO := FLOAT(recno-1);
  238.  FILELEN := FLOAT(filelen);
  239.  RECHI := RECNO * FILELEN;
  240.  
  241.  IF RECHI <= (HI-1.0) THEN
  242.     RETURN(0);
  243.  ELSE
  244.     rechi := 0;
  245.     WHILE RECHI > (HI-1.0) DO
  246.       RECHI := RECHI - HI;
  247.       INC(rechi);
  248.     END;
  249.     RETURN(rechi);
  250.  END;
  251. END RecHi;
  252.  
  253.  
  254. PROCEDURE RecLo( recno, filelen : CARDINAL) : CARDINAL;
  255. VAR
  256.  RECLO,HI,RECNO,FILELEN : REAL;
  257. BEGIN
  258.  HI := 6.5536E4;
  259.  
  260.  RECNO := FLOAT(recno-1);
  261.  FILELEN := FLOAT(filelen);
  262.  RECLO := RECNO * FILELEN;
  263.  
  264.  IF RECLO <= (HI-1.0) THEN
  265.    RETURN(TRUNC(RECLO));
  266.  ELSE
  267.    WHILE RECLO > (HI-1.0) DO
  268.      RECLO := RECLO - HI;
  269.    END;
  270.    RETURN(TRUNC(RECLO));
  271.  END;
  272. END RecLo;
  273.  
  274.  
  275. END Functions.
  276.  
  277.